package com.example.hellonotes.activity;

import org.json.JSONObject;

import com.example.hellonotes.BaseActivity;
import com.example.hellonotes.R;
import com.example.hellonotes.contants.AccessTokenKeeper;
import com.example.hellonotes.contants.WeiboConstants;
import com.sina.weibo.sdk.auth.Oauth2AccessToken;
import com.sina.weibo.sdk.auth.WeiboAuth;
import com.sina.weibo.sdk.auth.WeiboAuthListener;
import com.sina.weibo.sdk.auth.sso.SsoHandler;
import com.sina.weibo.sdk.exception.WeiboException;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;
import cn.bmob.v3.BmobUser;
import cn.bmob.v3.BmobUser.BmobThirdUserAuth;
import cn.bmob.v3.listener.OtherLoginListener;
import cn.bmob.v3.listener.UpdateListener;

/**
 * 第三方 授权登录界面（微博）
 * @author Administrator
 *
 */

public class weibologinActivity extends BaseActivity{

	 	private WeiboAuth mAuthInfo;
	    
	    /** 封装了 "access_token"，"expires_in"，"refresh_token"，并提供了他们的管理功能  */
	    private Oauth2AccessToken mAccessToken;

	    /** 注意：SsoHandler 仅当 SDK 支持 SSO 时有效 */
	    private SsoHandler mSsoHandler;
	    
	    Button login;
	    
	    
	    @Override
	    protected void onCreate(Bundle savedInstanceState) {
	    	// TODO 自动生成的方法存根
	    	super.onCreate(savedInstanceState);
	    	setContentView(R.layout.activity_weibologin);
	    	

			// 快速授权时，请不要传入 SCOPE，否则可能会授权不成功
	        mAuthInfo = new WeiboAuth(this, WeiboConstants.APP_KEY, WeiboConstants.REDIRECT_URL, WeiboConstants.SCOPE);
	        mSsoHandler = new SsoHandler(weibologinActivity.this, mAuthInfo);
	        mSsoHandler.authorize(new AuthListener());
	    	login = (Button)findViewById(R.id.bt_weibologin);
	    	login.setOnClickListener(new OnClickListener() {
				
				@Override
				public void onClick(View v) {
					
					mSsoHandler.authorize(new AuthListener());
				}
			});
	    	
	    }
	    
	    /**
	     * 当 SSO 授权 Activity 退出时，该函数被调用。
	     * 
	     * @see {@link Activity#onActivityResult}
	     */
	    @Override
	    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
	        super.onActivityResult(requestCode, resultCode, data);
	        
	        // SSO 授权回调
	        // 重要：发起 SSO 登陆的 Activity 必须重写 onActivityResult
	        if (mSsoHandler != null) {
	            mSsoHandler.authorizeCallBack(requestCode, resultCode, data);
	        }
	    }
	    
	    
	    /**
	     * 微博认证授权回调类。
	     * 1. SSO 授权时，需要在 {@link #onActivityResult} 中调用 {@link SsoHandler#authorizeCallBack} 后，
	     *    该回调才会被执行。
	     * 2. 非 SSO 授权时，当授权结束后，该回调就会被执行。
	     * 当授权成功后，请保存该 access_token、expires_in、uid 等信息到 SharedPreferences 中。
	     */
	    class AuthListener implements WeiboAuthListener {
	        
	        @Override
	        public void onComplete(Bundle values) {
	            // 从 Bundle 中解析 Token
	            mAccessToken = Oauth2AccessToken.parseAccessToken(values);
	            if (mAccessToken.isSessionValid()) {
	                // 保存 Token 到 SharedPreferences
	                AccessTokenKeeper.writeAccessToken(weibologinActivity.this, mAccessToken);
	                Oauth2AccessToken accessToken = Oauth2AccessToken.parseAccessToken(values);
	                String token = accessToken.getToken();
		            String expires = String.valueOf(accessToken.getExpiresTime());
		            String uid = accessToken.getUid();
		            //System.out.println(token);
		            //System.out.println(expires);
		            System.out.println(uid);
	                System.out.println("微博授权登录成功");
		            
		            
		            //微博账户一键注册登录Bmob用户
	                associateThirdParty(BmobThirdUserAuth.SNS_TYPE_WEIBO, token, expires, uid);
	                intent2Activity(MainActivity.class);
	            } else {
	                // 以下几种情况，您会收到 Code：
	                // 1. 当您未在平台上注册的应用程序的包名与签名时；
	                // 2. 当您注册的应用程序包名与签名不正确时；
	                // 3. 当您在平台上注册的包名和签名与您当前测试的应用的包名和签名不匹配时。
	                String code = values.getString("code");
	                String message = "auth_failed";
	                if (!TextUtils.isEmpty(code)) {
	                    message = message + "\nObtained the code: " + code;
	                    System.out.println("微博授权登录失败");
	                }
	            }
	        }
	        
	        
	        
	        /**和第三方账号进行关联  
	    	 * @method associateThirdParty 
	    	 * @param  snsType
	    	 * @param  accessToken
	    	 * @param  expiresIn   access_token的生命周期，单位是秒数
	    	 * @param  userId   当前授权用户的UID。
	    	 * @return void  
	    	 * @exception   
	    	 */
	    	private void associateThirdParty(String snsType,String accessToken, String expiresIn,String userId){
	    		BmobThirdUserAuth authInfo = new BmobThirdUserAuth(snsType,accessToken, expiresIn, userId);
	    		BmobUser.loginWithAuthData(weibologinActivity.this, authInfo, new OtherLoginListener() {
					
					
					@Override
					public void onSuccess(JSONObject arg0) {
						// TODO 自动生成的方法存根
						System.out.println("chenggong");
					}
					
					@Override
					public void onFailure(int arg0, String arg1) {
						// TODO 自动生成的方法存根
						System.out.println("shibai");
					}
				});
	    	}
	        

			@Override
			public void onCancel() {
				// TODO 自动生成的方法存根
				Toast.makeText(weibologinActivity.this, "cancel auth", Toast.LENGTH_LONG).show();
			}

			@Override
			public void onWeiboException(WeiboException arg0) {
				// TODO 自动生成的方法存根
			}
	
}
}
